package pjwstk.jps.visitor;

import pjwstk.jps.ast.auxname.IAsExpression;
import pjwstk.jps.ast.auxname.IGroupAsExpression;
import pjwstk.jps.ast.binary.IAndExpression;
import pjwstk.jps.ast.binary.ICloseByExpression;
import pjwstk.jps.ast.binary.ICommaExpression;
import pjwstk.jps.ast.binary.IDivideExpression;
import pjwstk.jps.ast.binary.IDotExpression;
import pjwstk.jps.ast.binary.IEqualsExpression;
import pjwstk.jps.ast.binary.INAndExpression;
import pjwstk.jps.ast.binary.IForAllExpression;
import pjwstk.jps.ast.binary.IForAnyExpression;
import pjwstk.jps.ast.binary.IGreaterOrEqualThanExpression;
import pjwstk.jps.ast.binary.IGreaterThanExpression;
import pjwstk.jps.ast.binary.IInExpression;
import pjwstk.jps.ast.binary.IIntersectExpression;
import pjwstk.jps.ast.binary.IJoinExpression;
import pjwstk.jps.ast.binary.ILessOrEqualThanExpression;
import pjwstk.jps.ast.binary.ILessThanExpression;
import pjwstk.jps.ast.binary.IMinusExpression;
import pjwstk.jps.ast.binary.IMinusSetExpression;
import pjwstk.jps.ast.binary.IModuloExpression;
import pjwstk.jps.ast.binary.IMultiplyExpression;
import pjwstk.jps.ast.binary.INotEqualsExpression;
import pjwstk.jps.ast.binary.IOrExpression;
import pjwstk.jps.ast.binary.IOrderByExpression;
import pjwstk.jps.ast.binary.IPlusExpression;
import pjwstk.jps.ast.binary.IUnionExpression;
import pjwstk.jps.ast.binary.IWhereExpression;
import pjwstk.jps.ast.binary.IXORExpression;
import pjwstk.jps.ast.terminal.IBooleanTerminal;
import pjwstk.jps.ast.terminal.IDoubleTerminal;
import pjwstk.jps.ast.terminal.IIntegerTerminal;
import pjwstk.jps.ast.terminal.INameTerminal;
import pjwstk.jps.ast.terminal.IStringTerminal;
import pjwstk.jps.ast.unary.IAvgExpression;
import pjwstk.jps.ast.unary.IBagExpression;
import pjwstk.jps.ast.unary.ICountExpression;
import pjwstk.jps.ast.unary.IExistsExpression;
import pjwstk.jps.ast.unary.IMaxExpression;
import pjwstk.jps.ast.unary.IMinExpression;
import pjwstk.jps.ast.unary.INotExpression;
import pjwstk.jps.ast.unary.IStructExpression;
import pjwstk.jps.ast.unary.ISumExpression;
import pjwstk.jps.ast.unary.IUniqueExpression;
import pjwstk.jps.ast.unary.IEmptyExpression;

public interface ASTVisitor {
	public void visitAsExpression(IAsExpression expr);
	public void visitGroupAsExpression(IGroupAsExpression expr);
	
	public void visitAllExpression(IForAllExpression expr);
	public void visitAndExpression(IAndExpression expr);
	public void visitAnyExpression(IForAnyExpression expr);
	public void visitCloseByExpression(ICloseByExpression expr);
	public void visitCommaExpression(ICommaExpression expr);
	public void visitDivideExpression(IDivideExpression expr);
	public void visitDotExpression(IDotExpression expr);
	public void visitEqualsExpression(IEqualsExpression expr);
	public void visitGreaterThanExpression(IGreaterThanExpression expr);
	public void visitGreaterOrEqualThanExpression(IGreaterOrEqualThanExpression expr);
	public void visitInExpression(IInExpression expr);
	public void visitIntersectExpression(IIntersectExpression expr);
	public void visitJoinExpression(IJoinExpression expr);
	public void visitLessOrEqualThanExpression(ILessOrEqualThanExpression expr);
	public void visitLessThanExpression(ILessThanExpression expr);
	public void visitMinusExpression(IMinusExpression expr);
	public void visitMinusSetExpression(IMinusSetExpression expr);
	public void visitModuloExpression(IModuloExpression expr);
	public void visitMultiplyExpression(IMultiplyExpression expr);
	public void visitNotEqualsExpression(INotEqualsExpression expr);
	public void visitOrderByExpression(IOrderByExpression expr);
	public void visitOrExpression(IOrExpression expr);
	public void visitPlusExpression(IPlusExpression expr);
	public void visitUnionExpression(IUnionExpression expr);
	public void visitWhereExpression(IWhereExpression expr);
	public void visitXORExpression(IXORExpression expr);
	public void visitNAndExpression(INAndExpression expr);
	
	public void visitBooleanTerminal(IBooleanTerminal expr);
	public void visitDoubleTerminal(IDoubleTerminal expr);
	public void visitIntegerTerminal(IIntegerTerminal expr);
	public void visitNameTerminal(INameTerminal expr);
	public void visitStringTerminal(IStringTerminal expr);
	
	public void visitBagExpression(IBagExpression expr);
	public void visitEmptyExpression(IEmptyExpression expr);
	public void visitCountExpression(ICountExpression expr);
	public void visitExistsExpression(IExistsExpression expr);
	public void visitMaxExpression(IMaxExpression expr);
	public void visitMinExpression(IMinExpression expr);
	public void visitNotExpression(INotExpression expr);
	public void visitStructExpression(IStructExpression expr);
	public void visitSumExpression(ISumExpression expr);
	public void visitUniqueExpression(IUniqueExpression expr);
	public void visitAvgExpression(IAvgExpression expr);
}
